The Data
sessionInfo(package=NULL)
setwd(dir = "../00 Doc/")
source("../01 Data/ETL_listings.R")
summary(df)
## id name host_id
## 1001400: 1 East Austin Bungalow : 6 4641823 : 127
## 1002993: 1 East Austin Home : 4 31148752: 42
## 1003316: 1 Euro Hostel/Dorm Style by Downtown: 4 8167447 : 26
## 1003775: 1 Charming East Austin Bungalow : 3 579290 : 18
## 1009806: 1 East Austin Charmer : 3 1488733 : 17
## 1011620: 1 1 bedroom with private bath : 2 1568741 : 15
## (Other):5829 (Other) :5813 (Other) :5590
## host_name neighbourhood_group neighbourhood latitude
## Erica : 135 NA's:5835 78704 :1601 30.1305163587544: 1
## John : 56 78702 : 797 30.1399214304874: 1
## Sarah : 51 78703 : 419 30.1406878366631: 1
## Michael: 49 78741 : 414 30.1415093891488: 1
## Ryan : 45 78745 : 328 30.1423321194423: 1
## (Other):5206 78751 : 251 30.1424347881363: 1
## NA's : 293 (Other):2025 (Other) :5829
## longitude room_type price
## -5.09368239448111: 1 Entire home/apt:4060 150 : 253
## -97.5670481812431: 1 Private room :1652 200 : 227
## -97.586245659854 : 1 Shared room : 123 250 : 203
## -97.5877635840428: 1 300 : 181
## -97.6136226010006: 1 100 : 175
## -97.6180279594552: 1 125 : 156
## (Other) :5829 (Other):4640
## minimum_nights number_of_reviews last_review reviews_per_month
## 1 :2776 0 :2006 2015-10-26: 260 1 : 211
## 2 :2005 1 : 698 2015-10-12: 215 0.13 : 194
## 3 : 690 2 : 452 2015-10-25: 187 0.25 : 79
## 4 : 147 3 : 302 2015-11-02: 177 2 : 77
## 5 : 88 4 : 275 2015-10-27: 166 0.05 : 65
## 7 : 43 5 : 186 (Other) :2824 (Other):3201
## (Other): 86 (Other):1916 NA's :2006 NA's :2008
## calculated_host_listings_count availability_365
## 1 :4169 365 :1236
## 2 : 823 364 : 268
## 3 : 232 363 : 203
## 7 : 169 0 : 92
## 4 : 152 362 : 80
## 6 : 62 361 : 71
## (Other): 228 (Other):3885
Instruction to Reproduce
Download the AirBnb data from data.world, search for “KurtAKranz” and download the dataset named “S17 DV Final Project.”
We ran a ETL script that standardized the data from “01 Data” folder. It standardized the colomn data to be consistent among all data points.
From that, we used Tableau’s Data connector to connect to our data set in data.world.
We created 6 different visualizations using Boxplots, Scatter Plots, Histrograms, Crosstabs, and Barcharts.
Our first visualization, we showed a crosstab using zip code and room type, with a key performance idicator of average price. We also created parameters that effectively let one select a price range for acceptable locations.
Our second visualization, we showed each zip code’s deviation from the average price among all zip codes. From this, we created a set of the top 5 most pricey zip codes.
Our third visualization, we showed the average price of each room type, grouped by zipcode. For each room type, we had a reference line showing the average price of each room type.
Our fourth visualization, we created a histogram using the average price to convey that the data is skewed right. This means that using the mean to calculate the average is not going to be as accurate as using the median.
Our fifth visualization was Population Vs Average Price where we created a join between the census data and then created a scatter plot with neighbourhood as the coloumns and AVG(Population) and AGG(Average Price) as the rows. We then added a trend line to convey the data’s negetive trend.
Our sixth and final visualization, we created a boxplot for the prices of the top 5 most pricey zip codes. This showed the outliars in the data, showing again that the median is the better way to express the average.
For our shiny visualizations, we created data frames for each graph we had. We made specifc queries for whatever data we needed. Then we used ggplot to take our data frame and create a ggplot object. From that, we used plotly to express the ggplot data with a more interactive display.
Crosstab with Average Price KPI
- Crosstab using zip code and room type, with a key performance idicator of average price. Parameters were set at 197 for the low end, and 425 for the high end. Effectively making $197 - $425 someones price range. Values in that range are highlighted green. Values above are red, and values below are blue.
Tableau
Shiny
Above or Below Average
This shows the releative pricing for each zip code compared to the overall average. This enables comparision for pricing to see if you are paying above the market average.
Tableau
Shiny
Room Type vs. Price
- The average price of each room type, grouped by zipcode. For each room type, there is a reference line showing the average price of each room type. This
Tableau
Price Histogram
Histogram using the average price to convey that the data is skewed right. This means that using the mean to calculate the average is not going to be as accurate as using the median.
Tableau
Shiny
Population vs. Average Price
Scatter Plot created using a join between our data and the census data. The trend line’s negative slope indicated that the average price of a zip code decreases as the population of the zip code increases.
Tableau
Shiny
Top 5 Most Pricey Zip Codes
Boxplot for the prices of the top 5 most pricey zip codes. This showed the outliars in the data, showing again that the median is the better way to express the average.
Tableau
Shiny
Price Density Map
A map of Austin zip codes and the average price associated with each area. The red areas are zip codes with prices above the city’s average, the blue areas are zip codes with price being below the city’s average.
Tableau
LS0tDQp0aXRsZTogIjxjZW50ZXI+PGI+RmluYWwgUHJvamVjdDwvYj48L2NlbnRlcj4iDQphdXRob3I6ICI8Y2VudGVyPjxiPkRhbmllbCBTdHJvZSwgS3VydCBLcmFueiwgQm9uZ2FuaSBNYmlnaTwvYj48L2NlbnRlcj4iDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KLS0tDQoNCiMqKkludHJvZHVjdGlvbioqDQpUaGUgRGF0YSBTZXQgZXhwbG9yZXMgW0FpckJuQiBQcmljZXMgaW4gQXVzdGluXShodHRwczovL2RhdGEud29ybGQva3VydGFrcmFuei9zLTE3LWR2LWZpbmFsLXByb2plY3QpLiANCg0KIyoqVGhlIERhdGEqKg0KDQpgYGB7ciBzZXNzaW9uSW5mb30NCnNlc3Npb25JbmZvKHBhY2thZ2U9TlVMTCkNCmBgYA0KDQpgYGB7cn0NCnNldHdkKGRpciA9ICIuLi8wMCBEb2MvIikNCnNvdXJjZSgiLi4vMDEgRGF0YS9FVExfbGlzdGluZ3MuUiIpDQpzdW1tYXJ5KGRmKQ0KYGBgDQoNCmBgYA0KDQojIyAgICAgICAgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lICAgICAgICAgIGhvc3RfaWQgICAgDQojIyAgMTAwMTQwMDogICAxICAgRWFzdCBBdXN0aW4gQnVuZ2Fsb3cgICAgICAgICAgICAgIDogICA2ICAgNDY0MTgyMyA6IDEyNyAgDQojIyAgMTAwMjk5MzogICAxICAgRWFzdCBBdXN0aW4gSG9tZSAgICAgICAgICAgICAgICAgIDogICA0ICAgMzExNDg3NTI6ICA0MiAgDQojIyAgMTAwMzMxNjogICAxICAgRXVybyBIb3N0ZWwvRG9ybSBTdHlsZSBieSBEb3dudG93bjogICA0ICAgODE2NzQ0NyA6ICAyNiAgDQojIyAgMTAwMzc3NTogICAxICAgQ2hhcm1pbmcgRWFzdCBBdXN0aW4gQnVuZ2Fsb3cgICAgIDogICAzICAgNTc5MjkwICA6ICAxOCAgDQojIyAgMTAwOTgwNjogICAxICAgRWFzdCBBdXN0aW4gQ2hhcm1lciAgICAgICAgICAgICAgIDogICAzICAgMTQ4ODczMyA6ICAxNyAgDQojIyAgMTAxMTYyMDogICAxICAgMSBiZWRyb29tIHdpdGggcHJpdmF0ZSBiYXRoICAgICAgIDogICAyICAgMTU2ODc0MSA6ICAxNSAgDQojIyAgKE90aGVyKTo1ODI5ICAgKE90aGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIDo1ODEzICAgKE90aGVyKSA6NTU5MCAgDQojIyAgICBob3N0X25hbWUgICAgbmVpZ2hib3VyaG9vZF9ncm91cCBuZWlnaGJvdXJob29kICAgICAgICAgICAgICBsYXRpdHVkZSAgIA0KIyMgIEVyaWNhICA6IDEzNSAgIE5BJ3M6NTgzNSAgICAgICAgICAgNzg3MDQgIDoxNjAxICAgMzAuMTMwNTE2MzU4NzU0NDogICAxICANCiMjICBKb2huICAgOiAgNTYgICAgICAgICAgICAgICAgICAgICAgIDc4NzAyICA6IDc5NyAgIDMwLjEzOTkyMTQzMDQ4NzQ6ICAgMSAgDQojIyAgU2FyYWggIDogIDUxICAgICAgICAgICAgICAgICAgICAgICA3ODcwMyAgOiA0MTkgICAzMC4xNDA2ODc4MzY2NjMxOiAgIDEgIA0KIyMgIE1pY2hhZWw6ICA0OSAgICAgICAgICAgICAgICAgICAgICAgNzg3NDEgIDogNDE0ICAgMzAuMTQxNTA5Mzg5MTQ4ODogICAxICANCiMjICBSeWFuICAgOiAgNDUgICAgICAgICAgICAgICAgICAgICAgIDc4NzQ1ICA6IDMyOCAgIDMwLjE0MjMzMjExOTQ0MjM6ICAgMSAgDQojIyAgKE90aGVyKTo1MjA2ICAgICAgICAgICAgICAgICAgICAgICA3ODc1MSAgOiAyNTEgICAzMC4xNDI0MzQ3ODgxMzYzOiAgIDEgIA0KIyMgIE5BJ3MgICA6IDI5MyAgICAgICAgICAgICAgICAgICAgICAgKE90aGVyKToyMDI1ICAgKE90aGVyKSAgICAgICAgIDo1ODI5ICANCiMjICAgICAgICAgICAgICBsb25naXR1ZGUgICAgICAgICAgICAgIHJvb21fdHlwZSAgICAgICAgcHJpY2UgICAgIA0KIyMgIC01LjA5MzY4MjM5NDQ4MTExOiAgIDEgICBFbnRpcmUgaG9tZS9hcHQ6NDA2MCAgIDE1MCAgICA6IDI1MyAgDQojIyAgLTk3LjU2NzA0ODE4MTI0MzE6ICAgMSAgIFByaXZhdGUgcm9vbSAgIDoxNjUyICAgMjAwICAgIDogMjI3ICANCiMjICAtOTcuNTg2MjQ1NjU5ODU0IDogICAxICAgU2hhcmVkIHJvb20gICAgOiAxMjMgICAyNTAgICAgOiAyMDMgIA0KIyMgIC05Ny41ODc3NjM1ODQwNDI4OiAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgIDMwMCAgICA6IDE4MSAgDQojIyAgLTk3LjYxMzYyMjYwMTAwMDY6ICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwICAgIDogMTc1ICANCiMjICAtOTcuNjE4MDI3OTU5NDU1MjogICAxICAgICAgICAgICAgICAgICAgICAgICAgICAxMjUgICAgOiAxNTYgIA0KIyMgIChPdGhlcikgICAgICAgICAgOjU4MjkgICAgICAgICAgICAgICAgICAgICAgICAgIChPdGhlcik6NDY0MCAgDQojIyAgbWluaW11bV9uaWdodHMgbnVtYmVyX29mX3Jldmlld3MgICAgIGxhc3RfcmV2aWV3ICAgcmV2aWV3c19wZXJfbW9udGgNCiMjICAxICAgICAgOjI3NzYgICAwICAgICAgOjIwMDYgICAgICAyMDE1LTEwLTI2OiAyNjAgICAxICAgICAgOiAyMTEgICAgIA0KIyMgIDIgICAgICA6MjAwNSAgIDEgICAgICA6IDY5OCAgICAgIDIwMTUtMTAtMTI6IDIxNSAgIDAuMTMgICA6IDE5NCAgICAgDQojIyAgMyAgICAgIDogNjkwICAgMiAgICAgIDogNDUyICAgICAgMjAxNS0xMC0yNTogMTg3ICAgMC4yNSAgIDogIDc5ICAgICANCiMjICA0ICAgICAgOiAxNDcgICAzICAgICAgOiAzMDIgICAgICAyMDE1LTExLTAyOiAxNzcgICAyICAgICAgOiAgNzcgICAgIA0KIyMgIDUgICAgICA6ICA4OCAgIDQgICAgICA6IDI3NSAgICAgIDIwMTUtMTAtMjc6IDE2NiAgIDAuMDUgICA6ICA2NSAgICAgDQojIyAgNyAgICAgIDogIDQzICAgNSAgICAgIDogMTg2ICAgICAgKE90aGVyKSAgIDoyODI0ICAgKE90aGVyKTozMjAxICAgICANCiMjICAoT3RoZXIpOiAgODYgICAoT3RoZXIpOjE5MTYgICAgICBOQSdzICAgICAgOjIwMDYgICBOQSdzICAgOjIwMDggICAgIA0KIyMgIGNhbGN1bGF0ZWRfaG9zdF9saXN0aW5nc19jb3VudCBhdmFpbGFiaWxpdHlfMzY1DQojIyAgMSAgICAgIDo0MTY5ICAgICAgICAgICAgICAgICAgIDM2NSAgICA6MTIzNiAgICANCiMjICAyICAgICAgOiA4MjMgICAgICAgICAgICAgICAgICAgMzY0ICAgIDogMjY4ICAgIA0KIyMgIDMgICAgICA6IDIzMiAgICAgICAgICAgICAgICAgICAzNjMgICAgOiAyMDMgICAgDQojIyAgNyAgICAgIDogMTY5ICAgICAgICAgICAgICAgICAgIDAgICAgICA6ICA5MiAgICANCiMjICA0ICAgICAgOiAxNTIgICAgICAgICAgICAgICAgICAgMzYyICAgIDogIDgwICAgIA0KIyMgIDYgICAgICA6ICA2MiAgICAgICAgICAgICAgICAgICAzNjEgICAgOiAgNzEgICAgDQojIyAgKE90aGVyKTogMjI4ICAgICAgICAgICAgICAgICAgIChPdGhlcik6Mzg4NQ0KDQpgYGANCg0KDQoNCkluc3RydWN0aW9uIHRvIFJlcHJvZHVjZQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSBEb3dubG9hZCB0aGUgQWlyQm5iIGRhdGEgZnJvbSBkYXRhLndvcmxkLCBzZWFyY2ggZm9yICJLdXJ0QUtyYW56IiBhbmQgZG93bmxvYWQgdGhlIGRhdGFzZXQgbmFtZWQgIlMxNyBEViBGaW5hbCBQcm9qZWN0LiINCg0KLSBXZSByYW4gYSBFVEwgc2NyaXB0IHRoYXQgc3RhbmRhcmRpemVkIHRoZSBkYXRhIGZyb20gIjAxIERhdGEiIGZvbGRlci4gSXQgc3RhbmRhcmRpemVkIHRoZSBjb2xvbW4gZGF0YSB0byBiZSBjb25zaXN0ZW50IGFtb25nIGFsbCBkYXRhIHBvaW50cy4NCg0KLSBGcm9tIHRoYXQsIHdlIHVzZWQgVGFibGVhdSdzIERhdGEgY29ubmVjdG9yIHRvIGNvbm5lY3QgdG8gb3VyIGRhdGEgc2V0IGluIGRhdGEud29ybGQuDQoNCi0gV2UgY3JlYXRlZCA2IGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyB1c2luZyBCb3hwbG90cywgU2NhdHRlciBQbG90cywgSGlzdHJvZ3JhbXMsIENyb3NzdGFicywgYW5kIEJhcmNoYXJ0cy4NCg0KLSBPdXIgZmlyc3QgdmlzdWFsaXphdGlvbiwgd2Ugc2hvd2VkIGEgY3Jvc3N0YWIgdXNpbmcgemlwIGNvZGUgYW5kIHJvb20gdHlwZSwgd2l0aCBhIGtleSBwZXJmb3JtYW5jZSBpZGljYXRvciBvZiBhdmVyYWdlIHByaWNlLiBXZSBhbHNvIGNyZWF0ZWQgcGFyYW1ldGVycyB0aGF0IGVmZmVjdGl2ZWx5IGxldCBvbmUgc2VsZWN0IGEgcHJpY2UgcmFuZ2UgZm9yIGFjY2VwdGFibGUgbG9jYXRpb25zLg0KDQotIE91ciBzZWNvbmQgdmlzdWFsaXphdGlvbiwgd2Ugc2hvd2VkIGVhY2ggemlwIGNvZGUncyBkZXZpYXRpb24gZnJvbSB0aGUgYXZlcmFnZSBwcmljZSBhbW9uZyBhbGwgemlwIGNvZGVzLiBGcm9tIHRoaXMsIHdlIGNyZWF0ZWQgYSBzZXQgb2YgdGhlIHRvcCA1IG1vc3QgcHJpY2V5IHppcCBjb2Rlcy4NCg0KLSBPdXIgdGhpcmQgdmlzdWFsaXphdGlvbiwgd2Ugc2hvd2VkIHRoZSBhdmVyYWdlIHByaWNlIG9mIGVhY2ggcm9vbSB0eXBlLCBncm91cGVkIGJ5IHppcGNvZGUuIEZvciBlYWNoIHJvb20gdHlwZSwgd2UgaGFkIGEgcmVmZXJlbmNlIGxpbmUgc2hvd2luZyB0aGUgYXZlcmFnZSBwcmljZSBvZiBlYWNoIHJvb20gdHlwZS4NCg0KLSBPdXIgZm91cnRoIHZpc3VhbGl6YXRpb24sIHdlIGNyZWF0ZWQgYSBoaXN0b2dyYW0gdXNpbmcgdGhlIGF2ZXJhZ2UgcHJpY2UgdG8gY29udmV5IHRoYXQgdGhlIGRhdGEgaXMgc2tld2VkIHJpZ2h0LiBUaGlzIG1lYW5zIHRoYXQgdXNpbmcgdGhlIG1lYW4gdG8gY2FsY3VsYXRlIHRoZSBhdmVyYWdlIGlzIG5vdCBnb2luZyB0byBiZSBhcyBhY2N1cmF0ZSBhcyB1c2luZyB0aGUgbWVkaWFuLg0KDQotIE91ciBmaWZ0aCB2aXN1YWxpemF0aW9uIHdhcyBQb3B1bGF0aW9uIFZzIEF2ZXJhZ2UgUHJpY2Ugd2hlcmUgd2UgY3JlYXRlZCBhIGpvaW4gYmV0d2VlbiB0aGUgY2Vuc3VzIGRhdGEgYW5kIHRoZW4gY3JlYXRlZCBhIHNjYXR0ZXIgcGxvdCB3aXRoIG5laWdoYm91cmhvb2QgYXMgdGhlIGNvbG91bW5zIGFuZCBBVkcoUG9wdWxhdGlvbikgYW5kIEFHRyhBdmVyYWdlIFByaWNlKSBhcyB0aGUgcm93cy4gV2UgdGhlbiBhZGRlZCBhIHRyZW5kIGxpbmUgdG8gY29udmV5IHRoZSBkYXRhJ3MgbmVnZXRpdmUgdHJlbmQuDQoNCi0gT3VyIHNpeHRoIGFuZCBmaW5hbCB2aXN1YWxpemF0aW9uLCB3ZSBjcmVhdGVkIGEgYm94cGxvdCBmb3IgdGhlIHByaWNlcyBvZiB0aGUgdG9wIDUgbW9zdCBwcmljZXkgemlwIGNvZGVzLiBUaGlzIHNob3dlZCB0aGUgb3V0bGlhcnMgaW4gdGhlIGRhdGEsIHNob3dpbmcgYWdhaW4gdGhhdCB0aGUgbWVkaWFuIGlzIHRoZSBiZXR0ZXIgd2F5IHRvIGV4cHJlc3MgdGhlIGF2ZXJhZ2UuDQoNCi0gRm9yIG91ciBzaGlueSB2aXN1YWxpemF0aW9ucywgd2UgY3JlYXRlZCBkYXRhIGZyYW1lcyBmb3IgZWFjaCBncmFwaCB3ZSBoYWQuIFdlIG1hZGUgc3BlY2lmYyBxdWVyaWVzIGZvciB3aGF0ZXZlciBkYXRhIHdlIG5lZWRlZC4gVGhlbiB3ZSB1c2VkIGdncGxvdCB0byB0YWtlIG91ciBkYXRhIGZyYW1lIGFuZCBjcmVhdGUgYSBnZ3Bsb3Qgb2JqZWN0LiBGcm9tIHRoYXQsIHdlIHVzZWQgcGxvdGx5IHRvIGV4cHJlc3MgdGhlIGdncGxvdCBkYXRhIHdpdGggYSBtb3JlIGludGVyYWN0aXZlIGRpc3BsYXkuICANCg0KDQoNCiMjW1NoaW55IEFwcF0oaHR0cHM6Ly9rdXJ0YWtyYW56LnNoaW55YXBwcy5pby9haXJibmJfYXVzdGluLykgDQoNCg0KQ3Jvc3N0YWIgd2l0aCBBdmVyYWdlIFByaWNlIEtQSQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gQ3Jvc3N0YWIgdXNpbmcgemlwIGNvZGUgYW5kIHJvb20gdHlwZSwgd2l0aCBhIGtleSBwZXJmb3JtYW5jZSBpZGljYXRvciBvZiBhdmVyYWdlIHByaWNlLiBQYXJhbWV0ZXJzIHdlcmUgc2V0IGF0IDE5NyBmb3IgdGhlIGxvdyBlbmQsIGFuZCA0MjUgZm9yIHRoZSBoaWdoIGVuZC4gRWZmZWN0aXZlbHkgbWFraW5nICQxOTcgLSAkNDI1IHNvbWVvbmVzIHByaWNlIHJhbmdlLiBWYWx1ZXMgaW4gdGhhdCByYW5nZSBhcmUgaGlnaGxpZ2h0ZWQgZ3JlZW4uIFZhbHVlcyBhYm92ZSBhcmUgcmVkLCBhbmQgdmFsdWVzIGJlbG93IGFyZSBibHVlLg0KDQojIyNUYWJsZWF1DQo8Y2VudGVyPiFbQWJvdmVfb3JfQmVsb3cgQXZlcmFnZV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvY3Jvc3N0YWIucG5nKTwvY2VudGVyPg0KIyMjU2hpbnkNCjxjZW50ZXI+IVtBYm92ZV9vcl9CZWxvdyBBdmVyYWdlMl0oLi4vMDMgVmlzdWFsaXphdGlvbnMvY3Jvc3N0YWJfc2hpbnkucG5nKTwvY2VudGVyPg0KDQoNCkFib3ZlIG9yIEJlbG93IEF2ZXJhZ2UNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpUaGlzIHNob3dzIHRoZSByZWxlYXRpdmUgcHJpY2luZyBmb3IgZWFjaCB6aXAgY29kZSBjb21wYXJlZCB0byB0aGUgb3ZlcmFsbCBhdmVyYWdlLiBUaGlzIGVuYWJsZXMgY29tcGFyaXNpb24gZm9yIHByaWNpbmcgdG8gc2VlIGlmIHlvdSBhcmUgcGF5aW5nIGFib3ZlIHRoZSBtYXJrZXQgYXZlcmFnZS4NCg0KDQojIyNUYWJsZWF1DQo8Y2VudGVyPiFbQWJvdmVfb3JfQmVsb3cgQXZlcmFnZV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvYWJvdmVfb3JfYmVsb3dfYXZlcmFnZS5wbmcpPC9jZW50ZXI+DQojIyNTaGlueQ0KPGNlbnRlcj4hW0Fib3ZlX29yX0JlbG93IEF2ZXJhZ2UyXSguLi8wMyBWaXN1YWxpemF0aW9ucy9hYm92ZV9vcl9iZWxvd19hdmVyYWdlX3NoaW55LnBuZyk8L2NlbnRlcj4NCg0KDQoNCg0KUm9vbSBUeXBlIHZzLiBQcmljZQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gVGhlIGF2ZXJhZ2UgcHJpY2Ugb2YgZWFjaCByb29tIHR5cGUsIGdyb3VwZWQgYnkgemlwY29kZS4gRm9yIGVhY2ggcm9vbSB0eXBlLCB0aGVyZSBpcyBhIHJlZmVyZW5jZSBsaW5lIHNob3dpbmcgdGhlIGF2ZXJhZ2UgcHJpY2Ugb2YgZWFjaCByb29tIHR5cGUuIFRoaXMgDQoNCiMjI1RhYmxlYXUNCjxjZW50ZXI+IVtBYm92ZV9vcl9CZWxvdyBBdmVyYWdlXSguLi8wMyBWaXN1YWxpemF0aW9ucy9yb29tX3R5cGVfcHJpY2UucG5nKTwvY2VudGVyPg0KIyMjU2hpbnkNCjxjZW50ZXI+IVtBYm92ZV9vcl9CZWxvdyBBdmVyYWdlMl0oLi4vMDMgVmlzdWFsaXphdGlvbnMvcm9vbV90eXBlX3ByaWNlX3NoaW55MS5wbmcpPC9jZW50ZXI+DQo8Y2VudGVyPiFbQWJvdmVfb3JfQmVsb3cgQXZlcmFnZTJdKC4uLzAzIFZpc3VhbGl6YXRpb25zL3Jvb21fdHlwZV9wcmljZV9zaGlueTIucG5nKTwvY2VudGVyPg0KPGNlbnRlcj4hW0Fib3ZlX29yX0JlbG93IEF2ZXJhZ2UyXSguLi8wMyBWaXN1YWxpemF0aW9ucy9yb29tX3R5cGVfcHJpY2Vfc2hpbnkzLnBuZyk8L2NlbnRlcj4NCg0KDQoNClByaWNlIEhpc3RvZ3JhbQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkhpc3RvZ3JhbSB1c2luZyB0aGUgYXZlcmFnZSBwcmljZSB0byBjb252ZXkgdGhhdCB0aGUgZGF0YSBpcyBza2V3ZWQgcmlnaHQuIFRoaXMgbWVhbnMgdGhhdCB1c2luZyB0aGUgbWVhbiB0byBjYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgaXMgbm90IGdvaW5nIHRvIGJlIGFzIGFjY3VyYXRlIGFzIHVzaW5nIHRoZSBtZWRpYW4uDQoNCg0KIyMjVGFibGVhdQ0KPGNlbnRlcj4hW0Fib3ZlX29yX0JlbG93IEF2ZXJhZ2VdKC4uLzAzIFZpc3VhbGl6YXRpb25zL3ByaWNlX2hpc3RvZ3JhbS5wbmcpPC9jZW50ZXI+DQojIyNTaGlueQ0KPGNlbnRlcj4hW0Fib3ZlX29yX0JlbG93IEF2ZXJhZ2UyXSguLi8wMyBWaXN1YWxpemF0aW9ucy9wcmljZV9oaXN0b2dyYW1fc2hpbnkucG5nKTwvY2VudGVyPg0KDQoNCg0KUG9wdWxhdGlvbiB2cy4gQXZlcmFnZSBQcmljZQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClNjYXR0ZXIgUGxvdCBjcmVhdGVkIHVzaW5nIGEgam9pbiBiZXR3ZWVuIG91ciBkYXRhIGFuZCB0aGUgY2Vuc3VzIGRhdGEuIFRoZSB0cmVuZCBsaW5lJ3MgbmVnYXRpdmUgc2xvcGUgaW5kaWNhdGVkIHRoYXQgdGhlIGF2ZXJhZ2UgcHJpY2Ugb2YgYSB6aXAgY29kZSBkZWNyZWFzZXMgYXMgdGhlIHBvcHVsYXRpb24gb2YgdGhlIHppcCBjb2RlIGluY3JlYXNlcy4NCg0KDQojIyNUYWJsZWF1DQo8Y2VudGVyPiFbQWJvdmVfb3JfQmVsb3cgQXZlcmFnZV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvc2NhdHRlcl9wbG90LnBuZyk8L2NlbnRlcj4NCiMjI1NoaW55DQo8Y2VudGVyPiFbQWJvdmVfb3JfQmVsb3cgQXZlcmFnZTJdKC4uLzAzIFZpc3VhbGl6YXRpb25zL3NjYXR0ZXJfcGxvdF9zaGlueS5wbmcpPC9jZW50ZXI+DQoNCg0KDQpUb3AgNSBNb3N0IFByaWNleSBaaXAgQ29kZXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpCb3hwbG90IGZvciB0aGUgcHJpY2VzIG9mIHRoZSB0b3AgNSBtb3N0IHByaWNleSB6aXAgY29kZXMuIFRoaXMgc2hvd2VkIHRoZSBvdXRsaWFycyBpbiB0aGUgZGF0YSwgc2hvd2luZyBhZ2FpbiB0aGF0IHRoZSBtZWRpYW4gaXMgdGhlIGJldHRlciB3YXkgdG8gZXhwcmVzcyB0aGUgYXZlcmFnZS4NCg0KDQojIyNUYWJsZWF1DQo8Y2VudGVyPiFbQWJvdmVfb3JfQmVsb3cgQXZlcmFnZV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvYm94X3Bsb3QucG5nKTwvY2VudGVyPg0KIyMjU2hpbnkNCjxjZW50ZXI+IVtBYm92ZV9vcl9CZWxvdyBBdmVyYWdlMl0oLi4vMDMgVmlzdWFsaXphdGlvbnMvYm94X3Bsb3Rfc2hpbnkucG5nKTwvY2VudGVyPg0KDQoNClByaWNlIERlbnNpdHkgTWFwDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQSBtYXAgb2YgQXVzdGluIHppcCBjb2RlcyBhbmQgdGhlIGF2ZXJhZ2UgcHJpY2UgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYXJlYS4gVGhlIHJlZCBhcmVhcyBhcmUgemlwIGNvZGVzIHdpdGggcHJpY2VzIGFib3ZlIHRoZSBjaXR5J3MgYXZlcmFnZSwgdGhlIGJsdWUgYXJlYXMgYXJlIHppcCBjb2RlcyB3aXRoIHByaWNlIGJlaW5nIGJlbG93IHRoZSBjaXR5J3MgYXZlcmFnZS4NCg0KDQojIyNUYWJsZWF1DQo8Y2VudGVyPiFbQWJvdmVfb3JfQmVsb3cgQXZlcmFnZV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvaGVhdG1hcC5wbmcpPC9jZW50ZXI+DQo=